package edu.intec.matsab.dao;

import edu.intec.matsab.persistence.Estudiante;
import edu.intec.matsab.persistence.PersistenceManager;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceException;
import javax.persistence.Query;

/**
 *
 * @author matilde
 */
public class EstudianteDAO extends BasicoDAO {

    public static Estudiante buscarPorMatricula(String matricula) {
        EntityManagerFactory emf = PersistenceManager.getInstance().getEntityManagerFactory();
        EntityManager manager = emf.createEntityManager();

        Estudiante estudiante = new Estudiante();

        try {
            Query query = manager.createNamedQuery("Estudiante.findByMatricula");
            query.setParameter("matricula", matricula);
            estudiante = (Estudiante) query.getSingleResult();

        } catch (PersistenceException exception) {
            exception.printStackTrace();
        } finally {
            manager.close();
        }

        return estudiante;
    }

    public static List<Estudiante> buscarPorNombres(String nombre, String apellido) {
        EntityManagerFactory emf = PersistenceManager.getInstance().getEntityManagerFactory();
        EntityManager manager = emf.createEntityManager();

        List<Estudiante> listEstudiante = new ArrayList<Estudiante>();

        try {
            Query query = manager.createNamedQuery("Estudiante.findByNombreApellido");
            query.setParameter("nombre", nombre);
            query.setParameter("apellido", apellido);
            listEstudiante = (List<Estudiante>) query.getResultList();

        } catch (PersistenceException exception) {
            exception.printStackTrace();
        } finally {
            manager.close();
        }

        return listEstudiante;
    }

    public static List<Estudiante> buscarPorCarrera(String idCarrera) {
        EntityManagerFactory emf = PersistenceManager.getInstance().getEntityManagerFactory();
        EntityManager manager = emf.createEntityManager();

        List<Estudiante> listEstudiante = new ArrayList<Estudiante>();

        try {
            Query query = manager.createNamedQuery("Estudiante.findByCarrera");
            query.setParameter("idCarrera", idCarrera);
            listEstudiante = (List<Estudiante>) query.getResultList();

        } catch (PersistenceException exception) {
            exception.printStackTrace();
        } finally {
            manager.close();
        }

        return listEstudiante;
    }

    public static boolean eliminar(Estudiante obj) {
        EntityManagerFactory emf = PersistenceManager.getInstance().getEntityManagerFactory();
        EntityManager manager = emf.createEntityManager();

        boolean resultado = false;

        try {

            manager.getTransaction().begin();
            Estudiante estudiante = manager.getReference(Estudiante.class, obj.getMatricula());
            
            manager.remove(estudiante);
            manager.getTransaction().commit();

            resultado = true;

        } catch (PersistenceException exception) {
            exception.printStackTrace();
        } finally {
            manager.close();
        }

        return resultado;
    }
}
